#include "print.h"
#include "../aerolineas/aviones.h"
#include "drawer_monitor.h"
#include "../main/map_querys.h"
#include "../commons/errors.h"

avion_t to_print;
int to_print_cant=0;
int to_print_size=0;

void free_to_print(){
	free(to_print);
}

int add_aeroplane_to_print(int ciudad_id, int distace, int drugs_cant, droga_t* drugs){
	pthread_mutex_lock(&monitor.mutex);
	while(monitor.counter >= monitor.limit){
		pthread_cond_wait(&monitor.cond2, &monitor.mutex);
	}
	if(to_print_size==0){
		to_print_size=10;
		to_print=malloc(to_print_size * sizeof(struct st_avion_t));
	}else if(to_print_cant <= to_print_size){
		to_print_size+=10;
		to_print=realloc(to_print, to_print_size * sizeof(struct  st_avion_t));
	}
	to_print[to_print_cant].ciudadDestinoId=ciudad_id;
   	to_print[to_print_cant].distancia=distace;
   	to_print[to_print_cant].drogasCant=drugs_cant;
	to_print[to_print_cant].drogas=drugs;
	to_print_cant++;
	pthread_mutex_unlock(&monitor.mutex);
	return 1;
}


void print_aeroplane(int i){
	printf("Le falta %d para llegar a %s, y lleva:\n",to_print[i].distancia, get_city_name_by_id(to_print[i].ciudadDestinoId));
	
	int j;
	for(j=0 ; j<to_print[i].drogasCant ; j++){
		printf("\t *%d gramos de %s \n", to_print[i].drogas[j]->cant, to_print[i].drogas[j]->nombre);
	}
}

int ready_to_draw(){
	monitor.counter++;
	pthread_cond_signal(&monitor.cond1);
	return 1;
}


void print_aeroplanes(){
	int i;
	for(i=0 ; i<to_print_cant ; i++){
		print_aeroplane(i);
		int j;
		for(j=0 ; j<to_print[i].drogasCant ; j++){
			free(to_print[i].drogas[j]->nombre);
			free(to_print[i].drogas[j]);
		}
		free(to_print[i].drogas);
	}
	to_print_cant=0;
}

void printMapa(mapa_t mapa)
{
	system("clear");
        int i, j;
        for( i = 0 ; i < mapa->ciudadesCant ; i++){
          
              printf("En %s nescesitan:\n", mapa->ciudades[i]->nombre);
              
              for(j=0; j < (mapa->ciudades[i])->drogasCant; j++){
                
                    printf("\t *%d gramos de %s\n", ((mapa->ciudades[i])->drogas[j])->cant, ((mapa->ciudades[i])->drogas[j])->nombre);
                  
              }
              
        }
	printf("\n\n");
        
}


